package com.shengzai

import scala.collection.mutable

object Code29Match {

  /**
   * Scala中的match相当于Java中的Switch，相比而言，Scala中match更加强大，
   * 在框架中的应用相对较广
   *
   * 模式匹配种类：
   * 1.匹配基本数据类型
   * 2.匹配字符串 -> 引用类型
   * 3.匹配枚举
   * 4.匹配类型
   * 5.匹配样例类对象
   *
   */
  def main(args: Array[String]): Unit = {

    //1.匹配基本数据类型
    val Num : Int =100
    Num match {
      case 1 =>{
      println("输入错误")
    }
      case 100 =>{
        println("输出的是100")
      }
      case _ =>{
      println("匹配不上")
    }
    }

    // 匹配字符串 -> 引用类型
    val str : String ="hello"
    str match {
      case "hello" =>{
        println("匹配到hello")
      }
      case "w" =>{
        println("匹配到world")
      }
      case _ =>{
        println("匹配不到字符串")
      }

    }
    // 3.匹配枚举
    val MJl :MJ.Value = MJ(4)

    MJl match {
      case MJ.one =>{
        println("匹配到了Mj.one"+MJ.one)
      }
      case MJ.two => {
        println("匹配到了Mj.one" + MJ.two)
      }
      case MJ.three => {
        println("匹配到了Mj.one" + MJ.three)
      }
      case MJ.four => {
        println("匹配到了Mj.one" + MJ.four)
      }
    }
    val value:Any = 1.2F
    // 4.匹配类型
    value match {
      case x:Int=>{
        println("类型为Int类型")
      }
      case x: String => {
        println("是一个String类型")
      }
      case x :Double =>{
        println("是一个Double类型数据")
      }
      case x :Float =>{
        println("是一个Float类型数据")
      }
      case _  =>{
        println("找不到什么类型数据")
      }
    }
    //5.匹配样例类对象
    val studentOne = new StudentTest(10001, "张三", 18)
    studentOne match {
      case StudentTest(10001,"张三",18) =>{
        println(s"匹配到${studentOne.name}同学的信息")
      }
    }

    //case 的应用

    val la = new mutable.HashMap[String, String]()

    la.+=(("Scala", "Spark"))
    la.+=(("shell", "Linux"))
    la.+=(("SQL", "HIVE"))

    val scalaRes: Option[String] = la.get("Scala")
    val matchResult: Unit = scalaRes match {
      case Some(x) => {
        println(s"获取到${x}")
      }
      case None => {
        println("没有匹配到数据")
      }
    }
    println(matchResult)
  }



}
object MJ extends Enumeration{
  val one: MJ.Value = Value(1, "1")
  val two: MJ.Value = Value(2, "2")
  val three: MJ.Value = Value(3, "3")
  val four: MJ.Value = Value(4, "4")
}
case class StudentTest(id:Int, name:String,age:Int)